object Demo21Implicit02 {
  def main(args: Array[String]): Unit = {
    // 函数式编程之以函数作为返回值的简写
    def addPrefix(str: String)(implicit prefix: String): Unit = {
      println(str + prefix)
    }

    addPrefix("Hadoop")("大象")
    addPrefix("Hive")("蜂巢")
    addPrefix("Spark")("火花")

    // 隐式转换变量 优点类似默认参数
    implicit val defaultPrefix: String = "默认的后缀"

    /**
     *  当只调用一次时 因为addPrefix函数中prefix参数用implicit修饰了
     *  那么在编译时 Scala的编译器 在当前的作用域中 寻找一个 同prefix参数类型一致的一个也用implicit修饰的变量
     *  即找到了defaultPrefix变量
     *  那么会自动进行第二次调用 就是将defaultPrefix变量值传给prefix
     */

    addPrefix("Spark")


  }

}
